#============================================
# #知识点
# python是动态语言，而反射(reflection)机制被视为动态语言的关键。
# 反射机制指的是在程序的运行状态中
# 对于任意一个类，都可以知道这个类的所有属性和方法；
# 对于任意一个对象，都能够调用他的任意方法和属性。
# 这种动态获取程序信息以及动态调用对象的功能称为反射机制。
#============================================
# 在python中实现反射非常简单，在程序运行过程中，如果我们获取一个不知道存有何种属性的对象，若想操作其内部属性，
# 可以先通过内置函数dir来获取任意一个类或者对象的属性列表，列表中全为字符串格式
class People:
    def __init__(self,name,age,gender):
        self.name=name
        self.age=age
        self.gender=gender

obj=People('egon',18,'male')
# print(dir(obj)) # 列表中查看到的属性全为字符串
#因为里面都是字符串所以再访问的时候只能用__dict__["属性"]来查看它的属性
# 接下来就是想办法通过字符串来操作对象的属性了，这就涉及到内置函数hasattr、getattr、setattr、delattr的使用了
# （Python中一切皆对象，类和对象都可以被这四个函数操作，用法一样）
print(hasattr(obj,"name"))  #返回属性是否存在

print(getattr(obj,"name"))  #返回属性值

setattr(obj,"name","冯彬恢") #修改对应属性的值
print(getattr(obj,"name"))  

delattr(obj,"name")  
print(hasattr(obj,"name")) #删除属性的值
#============================================